/*
 * InvertedListRecordSerializer.h
 *
 *  Created on: Nov 29, 2012
 *      Author: m
 */

#ifndef INVERTEDLISTRECORDSERIALIZER_H_
#define INVERTEDLISTRECORDSERIALIZER_H_

#include "Serializer.h"
#include "../file_system/InvertedListRecord.h"

namespace physical
{

class InvertedListRecordSerializer: public physical::Serializer<InvertedListRecord>
{
public:

    /**
     * Constructor
     */
    InvertedListRecordSerializer();

    /**
     * Destructor
     */
    virtual ~InvertedListRecordSerializer();

    /**
     * Serializa un Elemento
     *
     * @param element Elemento a serializar
     * @param block Array de bytes en donde se serializa el elemento
     * @return Cantidad de bytes escritos en el block
     */
    virtual size_t serialize( const InvertedListRecord& element,
            byteStream block );

    /**
     * Deserializa un Elemento
     *
     * @param block Array de bytes donde está serializado el elemento
     * @param element Referencia al elemento deserializado
     * @return Cantidad de bytes utilizados de block para deserializar
     */
    virtual size_t deserialize( const byteStream block,
            InvertedListRecord& element );

    /**
     * Devuelve la cantidad de bytes que ocupa el elemento al ser serializado
     *
     * @param element Elemento a probar
     * @return Cantidad de bytes que ocuparía el elemento serializado
     */
    virtual size_t getSize( const InvertedListRecord& element );

protected:
    typedef unsigned char content_size_t;
};

} /* namespace physical */
#endif /* INVERTEDLISTRECORDSERIALIZER_H_ */
